#!/usr/bin/python
# -*- coding:utf-8 -*-
# @author  : micah
# @time    :  
# @function: 
# @version :


class A:
    def __init__(self, name):
        self.name = name


class B(A):
    def __init__(self, age, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.age = age


class C(A):
    def __init__(self, gender, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.gender = gender


class D(B, C):
    def __init__(self, *args, **kwargs):
        # 当前孙子类不去创建任何属性
        super().__init__(*args, **kwargs)


# 根据类方法__mro__查询继承顺序
print(D.__mro__)


# 创建孙子类的实例对象
d = D(name='micah', age=18, gender='male')

print(f'name:{d.name}, age:{d.age}, gender:{d.gender}')


"""
参数消失问题
    这里的子类向父类所传递的数据不是完整的
    拆包
    
    在使用super一定要注意运行顺序
        孙子类的类对象.__mro__查询运行顺序
        
    如果在多重继承中使用的是*args需要确定参数的传递位置
    如果使用**kwargs则不需要关注参数传递的位置
"""

